#include "xgdraw.h"

Line::Line(){

}

Line::Line(double x, double y, double xx, double yy, QColor c)
    :x1(x),x2(xx),y1(y), y2(yy), color(c){

}

xgDraw::xgDraw( QWidget* parent)
    : QGLWidget( parent)
{


}
//这个是构造函数，parent就是父窗口部件的指针，name就是这个窗口部件的名称，fs就是窗口是否最大化。


xgDraw::~xgDraw()
{
    qDebug("xgDraw exited\n");
}
//这个是析构函数。

void xgDraw::initializeGL()
{
  //  glLineWidth(2.0);
    glClearColor( 1,1,1, 0.5 );//这一行设置清除屏幕时所用的颜色。
    //glClearDepth( 1.0 );//设置深度缓存。
    //glEnable( GL_DEPTH_TEST );//启用深度测试。
    //glDepthFunc( GL_LEQUAL );//所作深度测试的类型。
    //真正精细的透视修正。这一行告诉OpenGL我们希望进行最好的透视修正。这会十分轻微的影响性能。但使得透视图看起来好一点。
//    glEnable(GL_ALPHA_TEST);
    // 启动混合并设置混合因子
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

}

void xgDraw::addline(double x1, double y1, double x2, double y2, QColor c){
    lines.push_back(Line(2 * x1 / width() - 1,1 - 2 * y1 / height(),
                         2 * x2 / width() - 1,1 - 2 * y2 / height(), c));
}
void xgDraw::setColor(QColor c){
    glColor4f(c.redF(), c.greenF(),c.blueF(), c.alphaF());
}

void xgDraw::paintGL()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );//清楚屏幕和深度缓存。

    int s = lines.size();
    for(int i = 0; i < s; ++i){
        glColor4f(lines[i].color.redF(), lines[i].color.greenF(), lines[i].color.blueF(), lines[i].color.alphaF());
        glBegin(GL_LINE);
        glVertex3f(lines[i].x1, lines[i].y1, 0);
        glVertex3f(lines[i].x2, lines[i].y2, 0);
        glEnd();
    }
}
//尺寸改变事件
void xgDraw::resizeGL( int width, int height )
{
}

///键盘事件
void xgDraw::keyPressEvent( QKeyEvent *e )
{
    switch ( e->key() )
    {
    }//switch
}

//鼠标移动事件
void xgDraw::mouseMoveEvent(QMouseEvent * event ){
    int x = event->pos().x(), y = event->pos().y();
    if(event->buttons() & Qt::LeftButton){
    }
}
//鼠标按下事件
void xgDraw::mousePressEvent(QMouseEvent * event ){
    mouse_down = true;
}
//鼠标释放事件
void xgDraw::mouseReleaseEvent(QMouseEvent * event){
    mouse_down = false;
    /**点击拾取**/
    if (event->button() == Qt::RightButton){
    }
}
//滚轮事件
void xgDraw::wheelEvent(QWheelEvent * event ) {
}
